package com.ali.gts.controller;

import com.ali.gts.domain.Emp;
import com.ali.gts.service.EmpService;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.util.List;

@Controller
public class ViewController {

    Logger logger = LoggerFactory.getLogger(ViewController.class);

    @Autowired
    private EmpService empService;

    /**
     * 返回视图的逻辑名称，根据配置的视图解析器，找到 WEB-INF/jsp/user.jsp页面。
     * @param httpServletRequest
     * @param name
     * @param age
     * @return
     */
    @RequestMapping("user-review")
    public String userReview(HttpServletRequest httpServletRequest, String name, Integer age){

        logger.info("执行了ViewController 的userReview 方法 name是{} age是{}",name,age);
        //处理数据
        httpServletRequest.setAttribute("name",name);
        httpServletRequest.setAttribute("age",age);
        //使用视图解析器转发到user.jsp
        return "user";
    }


    /**
     * 返回一个完整的视图路径，此时因为配置了全局的视图解析器，此时会找不到我们的user.jsp
     * 那怎么办呢，把我们的全局视图解析器注释掉。
     * 这样就和上面的userReview 方法冲突了，怎么解决呢？
     * 使用forward
     * @param httpServletRequest
     * @param name
     * @param age
     * @return
     */
    @RequestMapping("user-review2")
    public String userReview2(HttpServletRequest httpServletRequest, String name, Integer age){

        logger.info("执行了ViewController 的userReview2 方法 name是{} age是{}",name,age);
        //处理数据
        httpServletRequest.setAttribute("name",name);
        httpServletRequest.setAttribute("age",age);
        return "forward:/WEB-INF/jsp/user.jsp";
    }

    /**
     * 控制器方法返回void,响应ajax 请求，使用HttpServletResponse 输出数据
     */

    @RequestMapping("/return-void-ajax.do")
    public void userReview2(HttpServletResponse response,Integer eid) throws Exception{
       Emp emp =  empService.getEmpAndDep(eid);
        logger.info("查询的结果是{}",emp);
       //把对象转为JSON
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(emp);
        response.setContentType("application/json;charset=utf-8");
        PrintWriter printWriter = response.getWriter();
        printWriter.print(json);
        printWriter.flush();
        printWriter.close();

    }

    /**
     * 控制器方法返回对象,响应ajax 请求，使用@RespouseBody注解的方式
     */

    @RequestMapping("/return-emp-ajax.do")
    @ResponseBody
    public Emp userReview3(Integer eid) throws Exception{
        Emp emp =  empService.getEmpAndDep(eid);
        logger.info("查询的结果是{}",emp);
        return emp;
    }

    /**
     * 控制器方法返回集合,响应ajax 请求，使用@RespouseBody注解的方式
     */

    @RequestMapping("/return-jsonArray-ajax.do")
    @ResponseBody
    public List<Emp> doAjaxJsonArray(Integer did) throws Exception{
        List<Emp> emps =  empService.getAllEmpByDid(did);
        logger.info("查询的结果是{}",emps);
        return emps;

    }

    /**
     * 控制器方法返回字符串,响应ajax 请求，使用@RespouseBody注解的方式
     */

    @RequestMapping(value = "/return-string-ajax.do",produces = "text/plain;charset=utf-8")
    @ResponseBody
    public String doAjaxString(Integer eid) throws Exception{
        Emp emp =  empService.getEmpAndDep(eid);
        logger.info("查询的结果是{}",emp);

        return emp.getEmpName();


    }




}
